package tp.tecnicasdisenio.model.accion;

import java.util.Date;

import tp.tecnicasdisenio.dao.AlumnoDaoInterface;
import tp.tecnicasdisenio.dao.EntregaTpDaoInterface;
import tp.tecnicasdisenio.dao.GrupoDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.dao.TrabajoPracticoDaoInterface;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.EntregaTp;
import tp.tecnicasdisenio.model.entity.EntregaTp.ClaveEntregaTp;
import tp.tecnicasdisenio.model.entity.Grupo;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.entity.TrabajoPractico;
import tp.tecnicasdisenio.model.parser.ParserTituloEntregaTp;
import tp.tecnicasdisenio.model.validador.ValidadorInterface;
import tp.tecnicasdisenio.util.EntityUtil;
import tp.tecnicasdisenio.util.FechaUtil;

public class AccionEntregarTp implements AccionInterface{

	private AlumnoDaoInterface alumnoDao;
	private MateriaDaoInterface materiaDao;
	private TrabajoPracticoDaoInterface trabajoPracticoDao;
	private GrupoDaoInterface grupoDao;
	private EntregaTpDaoInterface entregaTpDao;	
	private ValidadorInterface validadorEntregaTp;
	private ParserTituloEntregaTp parserTituloEntregaTp;
	
	@Override
	public void aplicarSobre(MailInterface mail, AutoRespondedorInterface autoRespondedor) {
		if(!validadorEntregaTp.valido(mail, autoRespondedor)){
			return;
		}

		Alumno alumno= alumnoDao.getPorEmail(mail.getFrom());
		Materia materia= materiaDao.getPorEmail(mail.getTo().get(0));
		Grupo grupo= grupoDao.getGrupoDel(alumno, materia, FechaUtil.getCuatrimestreActual());
		
		parserTituloEntregaTp.setMail(mail);
		TrabajoPractico trabajoPractico = trabajoPracticoDao.getPorId(EntityUtil.crearClaveTPCuatrimestreActual(materia, parserTituloEntregaTp.numeroTp()));
		
		ClaveEntregaTp claveEntregaTp= new ClaveEntregaTp();
		claveEntregaTp.setGrupo(grupo);
		claveEntregaTp.setNroTp(Integer.valueOf(parserTituloEntregaTp.numeroTp()));
		claveEntregaTp.setFecha(new Date());
		
		EntregaTp nuevaEntregaTp= new EntregaTp();
		nuevaEntregaTp.setClaveEntrega(claveEntregaTp);
		nuevaEntregaTp.setTrabajoPractico(trabajoPractico);
		 
		entregaTpDao.insertar(nuevaEntregaTp);
		entregaTpDao.guardarAdjuntos(mail.getAdjuntos(), nuevaEntregaTp);
		
		System.out.println(this.getClass().getSimpleName() + " aplicada.");
	}

	public AlumnoDaoInterface getAlumnoDao() {
		return alumnoDao;
	}

	public void setAlumnoDao(AlumnoDaoInterface alumnoDao) {
		this.alumnoDao = alumnoDao;
	}

	public MateriaDaoInterface getMateriaDao() {
		return materiaDao;
	}

	public void setMateriaDao(MateriaDaoInterface materiaDao) {
		this.materiaDao = materiaDao;
	}

	public TrabajoPracticoDaoInterface getTrabajoPracticoDao() {
		return trabajoPracticoDao;
	}

	public void setTrabajoPracticoDao(TrabajoPracticoDaoInterface trabajoPracticoDao) {
		this.trabajoPracticoDao = trabajoPracticoDao;
	}

	public GrupoDaoInterface getGrupoDao() {
		return grupoDao;
	}

	public void setGrupoDao(GrupoDaoInterface grupoDao) {
		this.grupoDao = grupoDao;
	}

	public EntregaTpDaoInterface getEntregaTpDao() {
		return entregaTpDao;
	}

	public void setEntregaTpDao(EntregaTpDaoInterface entregaTpDao) {
		this.entregaTpDao = entregaTpDao;
	}

	public ValidadorInterface getValidadorEntregaTp() {
		return validadorEntregaTp;
	}

	public void setValidadorEntregaTp(ValidadorInterface validadorEntregaTp) {
		this.validadorEntregaTp = validadorEntregaTp;
	}

	public ParserTituloEntregaTp getParserTituloEntregaTp() {
		return parserTituloEntregaTp;
	}

	public void setParserTituloEntregaTp(ParserTituloEntregaTp prserTituloEntregaTp) {
		this.parserTituloEntregaTp = prserTituloEntregaTp;
	}

}
